package ZengJiHong1.Test1;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @ClassName test1
 * @Author 16799
 * @Date 2025/8/14 17:25
 * @Version 1.0
 * @Description TODO
 *  day07-期中考试（黑马黄埔班基础进阶阶段中期考试试卷）
 ***需求
 * 目前有100名囚犯，每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号（要求这些囚犯的编号是不能重复的），
 * 然后让他们依次站成一排。(注：位置是从1开始计数的)，接下来，国王命令手下先干掉全部奇数位置处的人。
 * 剩下的人，又从新按位置1开始，再次干掉全部奇数位置处的人，依此类推，直到最后剩下一个人为止，剩下的这个人为幸存者。
 *
 * **具体功能点的要求如下：
 * 请输出幸存者的编号，以及他第一次所占的位置值是多少。
 *
 * **评分细则
 * * 能做出第一步：生产100个随机编号，且占位成功的，给3分。
 * * 能成功删除奇数位置处的数据的，给5分。
 * * 能正确获取结果的给2分。
 *
 * 时间：2025年8月14日18:31:23，第一次尝试，失败，不知道list怎么频繁删除元素
 *      3分
 **/
public class test1 {
    public static void main(String[] args) {
        //时间：2025年8月14日17:52:30
        //int[] arr = new int[100];
        Random r = new Random();
      /*  写的不好
        for (int i = 0; i < arr.length; i++) {
            int data = r.nextInt(1,100);
            //不能有重复的数据，还要做判断
            for (int j = 0; j < arr.length; j++) {
                if (data!=arr[j]){
                    arr[i] = data;
                }
            }
        }
        */

     /*   while (true){
            int data = r.nextInt(1,200);
            //怎么去重复
            for (int i = 0; i < arr.length; i++) {
                for (int j = 0; j < i; j++) {
                    if (arr[j] == data){
                        break;
                    }else {
                        arr[i] = data;
                    }
                }
            }
            if (arr[99]>0){
                break;
            }
        }
        System.out.println(Arrays.toString(arr));
        */

/*
        Set<Integer> arr = new HashSet<>();
        while (true){
            int data = r.nextInt(1,200);
            arr.add(data);
            if (arr.size()>=100){
                break;
            }
        }
        System.out.println("arr.size: "+arr.size());
        System.out.println(arr);

        System.out.println("---------------------------------");
        //转化为数组
        Object[] arr1 = arr.toArray();
        System.out.println("arr1.length: "+arr1.length);
        System.out.println(arr1[3]);
        System.out.println(Arrays.toString(arr1));

        System.out.println("---------------------------------");
        //数组不好遍历去重，所以转换为list
        List<Object> arr2 =Arrays.stream(arr1).toList();
        System.out.println("arr2.size: "+arr2.size());
        System.out.println(arr2.get(3));
        System.out.println(arr2);

        //arr2.quJishu;         //报错，列表不能调用方法，不是对象也不是类名
        //把quJishu方法的代码拿到main函数里面来，不行，这是个死循环，而且也不行，因为我发现每一次删除后，列表长度在变化
        while (arr2.size()!=1) {
            for (int i = 0; i < arr2.size(); i++) {
                if (i % 2 == 1) {
                    arr.remove(i);
                }
            }
        }
        System.out.println("最终结果： "+arr2);*/
 /*
        //报错：UnsupportedOperationException
        do {
            for (int i = 0; i < arr2.size(); i++) {
                if (i % 2 == 1) {
                    arr2.remove(i);
                }
            }
        }while (arr2.size()==1);
        System.out.println("最终结果： "+arr2);
*/
/*

        //时间：2025年8月15日16:00:09，这次用list，list有方法可以判断是否包含该元素，我是傻逼
        List<Integer> arr = new ArrayList<>();

        int i1 = 0;
        */
/*
        while (arr.size()<=200)为什么不能用这个为条件，一用就没反应，卡住了
        设置i1<200的时候明显比i1<100慢很多
         */

        /*

        while (i1<100) {
            int data = r.nextInt(1, 200);
            Boolean flag = arr.contains(data);
            if (!flag) {
                arr.add(data);
                i1++;
            }
        }
        System.out.println(arr.size());
        System.out.println(arr);
        //转化为set，如果有重复元素会自动去除，然后输出转化的set集合大小，还是100，说明无重复元素
        System.out.println(arr.stream().collect(Collectors.toSet()).size());
        //疑惑：list怎么频繁删除元素，删除一个，list长度变了，其他元素的索引也变了，从后往前删
        System.out.println(arr.get(99));
*/


        //时间：2025年8月16日16:03:11，再一次尝试，搞成一个对象来试试看

        List<qiuFang> qiuFangList = new ArrayList<>();

        //list集合改为对象后，不知道怎么保证是不重复的对象
        int index = r.nextInt(1,200);
        for (int i=0;i<100;i++) {
            qiuFangList.add(new qiuFang(index));
        }
        //qiuFangList.stream().filter().distinct().


    }

    public static List quJishu(List<Integer> arr){
        /*for (int i = 0; i < arr1.length; i++) {
            if (i%2!=0){
                //数组怎么去除元素，也不好
            }
        }*/
/*

        while (arr.size()==1) {
            for (int i = 0; i < arr.size(); i++) {
                if (i % 2 == 1) {
                    arr.remove(i);
                }
            }
        }
*/

    /*    从新按位置1开始，再次干掉全部奇数位置处的人  这个不行
        for (int i = 99; i > 0; i--) {
            if (i%2==1){
                arr.remove(i);
            }
        }
*/

        //这样也不行
        for (int i = 0; i < 100; i++) {
            if (i%2==1){
                arr.remove(i);
                i--;
            }
        }
        return arr;
    }

}
